#===============================================================
# 版权所有声明 (MIT 许可证)
# 版权所有 (c) 2024 embeddedboys 开发者
# 详细授权条款请参考下方英文注释
#===============================================================

# 设置 CMake 最低版本要求 (Pico SDK 需要 3.13 或更高)
cmake_minimum_required(VERSION 3.13)

# 条件编译开关：当 BUILD_TEST 为 ON 时构建可执行文件，否则构建静态库
if(BUILD_TEST)
    #------------------------ 测试固件构建模式 ------------------------
    # 在 project() 前必须初始化 Pico SDK 路径
    include(pico_sdk_import.cmake)  # 导入 Pico SDK 配置

    # 定义项目名称（必须与后续目标名一致）
    project(pio_i80)

    # 初始化 Pico SDK 运行时环境（时钟/外设/内存等）
    pico_sdk_init()

    # 创建可执行目标（生成 .elf 文件）
    add_executable(pio_i80 i80.c)

    # 从 i80.pio 文件生成 PIO 汇编头文件（自动处理 PIO 状态机逻辑）
    pico_generate_pio_header(pio_i80 ${CMAKE_CURRENT_LIST_DIR}/i80.pio)

    # 链接必要的 Pico 库
    target_link_libraries(pio_i80 PRIVATE
        pico_stdlib       # Pico 标准库
        hardware_pio      # PIO 硬件驱动
        hardware_dma      # DMA 控制器驱动
    )

    # 配置标准输入输出（禁用 USB，启用 UART）
    pico_enable_stdio_usb(pio_i80 0)  # 0=禁用 USB 控制台
    pico_enable_stdio_uart(pio_i80 1) # 1=启用 UART 控制台（默认 GPIO0/1）
    
    # 生成附加输出文件（.uf2/.hex/.bin 等烧录格式）
    pico_add_extra_outputs(pio_i80)

else(BUILD_TEST)
    #------------------------ 库构建模式 ----------------------------
    # 创建静态库目标（供其他项目链接使用）
    add_library(pio_i80)

    # 生成 PIO 头文件（与可执行模式相同）
    pico_generate_pio_header(pio_i80 ${CMAKE_CURRENT_LIST_DIR}/i80.pio)

    # 添加库的源文件（与可执行文件共用 i80.c）
    target_sources(pio_i80 PRIVATE i80.c)

    # 链接依赖库（与可执行模式相同，但作为接口依赖）
    target_link_libraries(pio_i80 PRIVATE
        pico_stdlib
        hardware_pio
        hardware_dma
    )

endif(BUILD_TEST)